package com.twb.wechat.cp.utils;

import java.util.List;

import com.twb.wechat.cp.config.WxCpConfiguration;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.article.NewArticle;
import me.chanjar.weixin.cp.bean.message.WxCpMessage;
import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;

/**
 * @ClassName WxMessageSend 
 * @Description 企业微信发送模板消息 
 * @author DHL
 * @date 2020年5月13日 上午8:42:44
 */
public class WxCpMessageSend {

	/**
	 * @Title textCard
	 * @Description 	企业微信发送文本卡片消息
	 * @param agentId	企业应用的id，整型。企业内部开发，可在应用的设置页面查看；第三方服务商，可通过接口 获取企业授权信息 获取该参数值
	 * @param toUser	成员ID列表（消息接收者，多个接收者用‘|’分隔，最多支持1000个）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送
	 * @param toParty	部门ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
	 * @param toTag		标签ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
	 * @param title		标题，不超过128个字节，超过会自动截断（支持id转译）
	 * @param description	描述，不超过512个字节，超过会自动截断（支持id转译）
	 * @param url		点击后跳转的链接
	 * @return
	 * @throws WxErrorException
	 * @AuthorOriginally DHL
	 * @date 2020年5月13日 上午8:32:40
	 */
	public static WxCpMessageSendResult textCard(Integer agentId, String toUser, String toParty, String toTag, String title, String description,
			String url) throws WxErrorException {
		
		WxCpMessage message = WxCpMessage.TEXTCARD()
					.agentId(agentId)	// 企业应用的id，整型。企业内部开发，可在应用的设置页面查看；第三方服务商，可通过接口 获取企业授权信息 获取该参数值
					.toUser(toUser)		// 成员ID列表（消息接收者，多个接收者用‘|’分隔，最多支持1000个）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送
					.toParty(toParty)	// 部门ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
					.toTag(toTag)		// 标签ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
					.title(title)		// 标题，不超过128个字节，超过会自动截断（支持id转译）
					.description(description)	// 描述，不超过512个字节，超过会自动截断（支持id转译）
					.url(url)			// 点击后跳转的链接。
					.build();
		
		WxCpService cpService = WxCpConfiguration.getCpService(agentId);
		WxCpMessageSendResult messageSend = cpService.getMessageService().send(message);
		return messageSend;
	}

	
	/**
	 * @Title textCard
	 * @Description 	企业微信发送文本卡片消息
	 * @param agentId	企业应用的id，整型。企业内部开发，可在应用的设置页面查看；第三方服务商，可通过接口 获取企业授权信息 获取该参数值
	 * @param toUser	成员ID列表（消息接收者，多个接收者用‘|’分隔，最多支持1000个）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送
	 * @param title		标题，不超过128个字节，超过会自动截断（支持id转译）
	 * @param description	描述，不超过512个字节，超过会自动截断（支持id转译）
	 * @param url		点击后跳转的链接
	 * @return
	 * @throws WxErrorException
	 * @AuthorOriginally DHL
	 * @date 2020年5月13日 上午8:32:40
	 */
	public static WxCpMessageSendResult textCard(Integer agentId, String toUser, String title, String description, String url) throws WxErrorException {
		WxCpMessage message = WxCpMessage.TEXTCARD()
					.agentId(agentId)	// 企业应用的id，整型。企业内部开发，可在应用的设置页面查看；第三方服务商，可通过接口 获取企业授权信息 获取该参数值
					.toUser(toUser)		// 成员ID列表（消息接收者，多个接收者用‘|’分隔，最多支持1000个）。特殊情况：指定为@all，则向关注该企业应用的全部成员发送
					.toParty(null)	// 部门ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
					.toTag(null)		// 标签ID列表，多个接收者用‘|’分隔，最多支持100个。当touser为@all时忽略本参数
					.title(title)		// 标题，不超过128个字节，超过会自动截断（支持id转译）
					.description(description)	// 描述，不超过512个字节，超过会自动截断（支持id转译）
					.url(url)			// 点击后跳转的链接。
					.build();
		
		WxCpService cpService = WxCpConfiguration.getCpService(agentId);
		
		WxCpMessageSendResult messageSend = cpService.getMessageService().send(message);
		
		return messageSend;
	}
	
	/**
	 * @Title newsCard
	 * @Description 图文消息发送（单条）
	 * @param agentId
	 * @param toUser
	 * @param articles
	 * @return
	 * @throws WxErrorException
	 * @AuthorOriginally 杜顺亚
	 * @date 2021年9月28日 上午11:36:12
	 */
	public static WxCpMessageSendResult newsCard(Integer agentId, String toUser, NewArticle articles) throws WxErrorException {
		WxCpMessage message = WxCpMessage.NEWS().agentId(agentId)
					.toUser(toUser)
					.toParty(null)
					.toTag(null)
					.addArticle(articles)
					.build();
		
		WxCpService cpService = WxCpConfiguration.getCpService(agentId);
		
		WxCpMessageSendResult messageSend = cpService.getMessageService().send(message);
		
		return messageSend;
	}
	
	public static WxCpMessageSendResult newsCard(Integer agentId, String toUser, List<NewArticle> articles) throws WxErrorException {
		WxCpMessage message = WxCpMessage.NEWS().agentId(agentId)
					.toUser(toUser)
					.toParty(null)
					.toTag(null)
					.articles(articles)
					.build();
		
		WxCpService cpService = WxCpConfiguration.getCpService(agentId);
		
		WxCpMessageSendResult messageSend = cpService.getMessageService().send(message);
		
		return messageSend;
	}

}
